//package com.yunhe.device.repository.device;
//
//import com.yunhe.common.model.authority.ResourceTree;
//import com.yunhe.device.domain.device.EnergyUnit;
//import org.springframework.data.neo4j.annotation.Query;
//import org.springframework.data.neo4j.repository.Neo4jRepository;
//import org.springframework.data.repository.query.Param;
//import org.springframework.stereotype.Repository;
//
//import java.util.List;
//
///**
// * 能量单元数据仓库
// * @desc 能量单元数据仓库定义
// * @author liuronglei
// */
//@Repository
//public interface EnergyUnitRepository extends Neo4jRepository<EnergyUnit, Long> {
//
//    EnergyUnit findByName(String name);
//
//    EnergyUnit findByCode(Long code);
//
//    @Query("start s=node({stationId}) match(s)-[]->(e:EnergyUnit) return e order by {sort} skip {page}*{size} limit {size}")
//    Iterable<EnergyUnit> findByStationId(@Param("stationId") Long stationId,
//                                         @Param("page") int page,
//                                         @Param("size") int size,
//                                         @Param("sort") String sort);
//
//    @Query("start s=node({stationId}) match(s)-[]->(e:EnergyUnit) return e skip {page}*{size} limit {size}")
//    Iterable<EnergyUnit> findByStationId(@Param("stationId") Long stationId,
//                                         @Param("page") int page,
//                                         @Param("size") int size);
//
//    @Query("match(s:Station{code:{stationCode}})-[]->(e:EnergyUnit) return e order by {sort} skip {page}*{size} limit {size}")
//    Iterable<EnergyUnit> findByStationCode(@Param("stationCode") Long stationCode,
//                                           @Param("page") int page,
//                                           @Param("size") int size,
//                                           @Param("sort") String sort);
//
//    @Query("match(s:Station{code:{stationCode}})-[]->(e:EnergyUnit) return e skip {page}*{size} limit {size}")
//    Iterable<EnergyUnit> findByStationCode(@Param("stationCode") Long stationCode,
//                                           @Param("page") int page,
//                                           @Param("size") int size);
//
//    /**
//     * 能量单元绑定设备
//     * @param id 能量单元ID
//     * @param deviceIds 设备ID列表
//     */
//    @Query("start n=node({id}),m=node({deviceIds}) create(n)-[:CONTAINS]->(m)")
//    void bindDevices(@Param("id") Long id, @Param("deviceIds") List<Long> deviceIds);
//
//    /**
//     * 能量单元解绑设备
//     * @param id 能量单元ID
//     * @param deviceIds 设备ID列表
//     */
//    @Query("start n=node({id}),m=node({deviceIds}) match(n)-[r:CONTAINS]->(m) delete r")
//    void unbindDevices(@Param("id") Long id, @Param("deviceIds") List<Long> deviceIds);
//
//    /**
//     * 根据能量单元和设备类型查找绑定的设备
//     * @param id 能量单元ID
//     * @param type 设备类型
//     */
//    @Query("match(e:EnergyUnit)-[r:CONTAINS]->(res) where ID(e)={id} and {type} in labels(res) " +
//            "return ID(res) as id, res.code as code, {type} as type,not exists((res)-[:CONTAINS]->()) as leaf, res as object")
//    Iterable<ResourceTree> searchDevices(@Param("id") Long id, @Param("type") String type);
//
//    /**
//     * 根据能量单元查找设备
//     * @param id 能量单元ID
//     */
//    @Query("match(e:EnergyUnit)-[]->(res) where ID(e)={id} " +
//            "return ID(res) as id, res.code as code, r.type as type,not exists((res)-[:CONTAINS]->()) as leaf, res as object")
//    Iterable<ResourceTree> searchDevices(@Param("id") Long id);
//
//    @Query("start s=node({stationId}) match(s)-[]->(e:EnergyUnit) return e")
//    List<EnergyUnit> findByStationId(@Param("stationId") Long stationId);
//
//    @Query("match(s:Station)-[]->(e:EnergyUnit) where s.code={stationCode} return e")
//    List<EnergyUnit> findByStationCode(@Param("stationCode") Long stationCode);
//}
